package com.truth.lock.template;

import com.truth.lock.LockInfo;
import com.truth.lock.enumeration.TruthLockType;

/**
 * @author truth
 */
public interface LockTemplate {

    /**
     * 获取分布式锁
     * @param key 分布式锁key
     * @param acquireCount 获取锁的次数
     * @param expire 分布式锁有效期
     * @param acquireTimeout 获取锁超时时间
     * @param lockType 布式锁执行器的class
     * @return LockInfo 分布式锁信息
     */
    LockInfo lock(String key, long acquireCount, long expire, long acquireTimeout, TruthLockType lockType);

    /**
     * 释放分布式锁
     * @param lockInfo 分布式锁信息
     * @return 释放分布式锁成功/失败
     */
    boolean releaseLock(LockInfo lockInfo);

}
